package com.stps;


import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

import com.stps.dao.BaseDao;

/**
 * 本类专门负责数据瘗的连接与关购摸作，在实例化本类对象时致巅味着燹进行数据庞的开发 所以在本亮的拘潘方法里要进行刭据库Q动加畎与数提库连换取得
 * 
 * @author Administrator
 */
public class DbUtils {
	static  String driverName = null;// "com.mysql.jdbc.Driver";
	static  String url  = null;// "jdbc:mysql://localhost:3306/daodemo?useUnicode=true&characterEncoding=utf-8";
	// MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL
	// static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
	// static final String DB_URL =
	// "jdbc:mysql://localhost:3306/RUNOOB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
	// 数据库的用户名与密码，需要根据自己的设置
	
	
	static  String user  = null;
	static  String password  = null;

	private Connection conn = null;

	static{//静态代码块,在类加载的时候执行
		init();
	}	
	
    //初始化连接参数,从配置文件里获得
	public static void init(){
		Properties properties=new Properties();
		String configFile = "db-daodemo.properties";
		InputStream is=BaseDao.class.getClassLoader().getResourceAsStream(configFile);
		try {
			properties.load(is);
		} catch (IOException e) {
			e.printStackTrace();
		}
		driverName = properties.getProperty("driver");
		url=properties.getProperty("url");
		user=properties.getProperty("user");
		password=properties.getProperty("password");
	} 	
	
	
	/**
	 * 在构造方法里面为conn对象进行实例化，可以自动取得数据库的连接对象
	 * 由于所有的揉作懿是基于数据库完成的，如票蚓据库取得不到连接，那么也就意味着所有的揉作都可以停止了
	 */
	public DbUtils() {
		// 注册 JDBC 驱动
		try {
			Class.forName(driverName);
			System.out.println("连接数据库成功...");
			try {
				conn = DriverManager.getConnection(url, user, password);			
			} catch (SQLException e) {				
				e.printStackTrace();
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 取得一个数提库的连接对象
	 *@return Connection实例化对象
	 * @throws ClassNotFoundException 
	 */
	public Connection getconnection() throws ClassNotFoundException {
		if(conn==null)
			try {
				Class.forName(driverName);
				System.out.println("连接数据库成功...");
				DriverManager.getConnection(url, user, password);
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
		return this.conn;
	}

	/*
	 * 负责数据库的关闭
	 */
	public void close() {
		if (this.conn != null)// != null表示现在存在有连换对象
			try {
				this.conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
	}
}
